<?php

namespace app\index\controller;

use think\Db;
use app\admin\controller\Base;


class Api extends Base
{

    /**
     *响应提示返回
     * @param int $code 状态码
     * @param string $msg 提示
     * @param mixed $data 返回数据
     */
    public static function initTipss($code = -1, $msg = '', $data = null)
    {
        // 是否自定义返回提示
        if ($msg == '') {
            switch ($code) {
                case 100:
                    $msg = '表单验证错误';
                    break;
                case 200:
                    $msg = '成功';
                    break;
                case 300:
                    $msg = '无操作权限';
                    break;
                case 400:
                    $msg = '操作失败';
                    break;
                case 500:
                    $msg = '内部服务器错误';
                    break;
                default:
                    $msg = '未知异常';
                    break;
            }
        }
        return ['code' => $code, 'msg' => $msg, 'data' => $data];
    }

    // 获取学科
    public static function course()
    {
        // 学科
        $course = DB::table('v1_course')->order('v1_course.course_id desc')->select();
        // 获取数据
        return $course;
    }

    // 获取作业
    public static function task($cid = null)
    {
        $task = [];
        // 作业
        $db = DB::table('v1_task');
        // 是否根据学科查询作业
        if ($cid) {
            $db->where('course_id', $cid);
            // $task =  $db->where('task_due_date', '> time', date('Y-m-d'))
            $task = $db->field('task_name as taskName,task_id as id')->order('v1_task.task_id desc')->select();
        }
        return $task;
    }

    // 查询附件路径
    public static function getAnnex()
    {
        $path = DB::table('v1_task_annex')->where('task_annex_id', input('aid'))->value('task_annex_path');
        return $path;
    }


    // 是否允许提交
    public static function isSave()
    {
        // 是否传入学号
        if (input('studentNo')) {
            // 获取用户信息
            $user = DB::table('v1_student')->where('student_no', input('studentNo'))->find();
            // 用户信息是否存在
            if ($user) {
                // 是否传入密钥
                if (input('studentToken')) {
                    // 验证密钥
                    if ($user['student_token'] == input('studentToken')) {
                        return $user;
                    } else {
                        exit(json_encode(self::initTipss(100, "上传密钥错误")));
                    }
                } else {
                    // 是否已经登录
                    if (session(ISLOGIN)) {
                        $user = session(USERINFO);
                        // 验证登录账号是否与填写账号一致（防止越权）
                        if ($user['student_no'] == input('studentNo')) {
                            return $user;
                        } else {
                            exit(json_encode(self::initTipss(100, "登录状态异常，请填写上传密钥")));
                        }
                    } else {
                        exit(json_encode(self::initTipss(100, "请登录后或填写上传密钥再上传作业")));
                    }
                }
            } else {
                exit(json_encode(self::initTipss(400, "未找到该学号同学")));
            }
        } else {
            exit(json_encode(self::initTipss(100, "请填写学号")));
        }
    }

    // 提交作业
    public static function saveTask()
    {
        Db::startTrans(); //开启事务
        try {
            // 验证提交
            $user = self::isSave();
            // 提交数据
            $data = [
                'student_id' => $user['student_id'],
                'task_id' => input('taskId'),
                'course_id' => input('courseId'),
                'task_record_state' => 1,
            ];
            $res =  DB::table('v1_task_record')->insertGetId($data);
            return $res;
        } catch (\Exception $ee) {
            // 事务回滚
            Db::rollback();
            return 500;
        }
    }

    // 保存附件信息
    public static function saveAnnex($data)
    {
        Db::startTrans(); //开启事务
        try {
            // 查询上传历史
            $annex = DB::table('v1_task_annex')->where('task_record_id', $data['task_record_id'])->find();
            if ($annex) {
                // 设置更新信息
                $updata = [
                    'task_annex_name' => $data['task_annex_name'],
                    'task_annex_path' => $data['task_annex_path'],
                    'task_annex_ext' => $data['task_annex_ext'],
                ];
                DB::table('v1_task_annex')->where('task_record_id', $data['task_record_id'])->update($updata);
            } else {
                // 首次上传添加
                DB::table('v1_task_annex')->insertGetId($data);
            }
            // 事务提交
            Db::commit();
            return true;
        } catch (\Exception $ee) {
            // 事务回滚
            Db::rollback();
            return false;
        }
    }
}
